#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <ctime>

#include <string>

using namespace std;

// void* fun(void* args)
// {
//     for(int i = 0;i<10;++i)
//     {
//         cout<<"从线程运行中..."<<endl;
//         sleep(1);
//     }
//     return (nullptr);
// }

// int main()
// {
//     int *x = 0; //64为环境下，指针大小为8字节
//     cout<<sizeof(x)<<endl;
//     pthread_t t;
//     int n = pthread_create(&t,nullptr,fun,nullptr);
//     if(n != 0) return -1;
//     for(int i = 0;i<10;++i)
//     {
//         cout<<"主线程运行中..."<<endl;
//         sleep(1);
//     }
//     return 0;
// }



//线程对象信息处理
// enum status
// {
//     ERROR, //退出异常
//     NORMAL //退出正常
// };

// class ThreadData
// {
// public:
//     ThreadData(const char* s,int _tid,time_t _t,int _top)
//         :tname(s)
//         ,tid(_tid)
//         ,time(_t)
//         ,top(_top)
//         {}


//     string tname; //线程名
//     int tid; //线程id
//     time_t time; //创建时间

//     status stat; //退出状态
//     int top; //执行任务
//     int result; //执行结果
// };


// void* fun(void* args)
// {
//     //char* str = (char*)args;
//     ThreadData* trd = static_cast<ThreadData*>(args);
//     int ret = 0;
//     int _top = trd->top;
//     for(int i = 0;i<_top;++i)
//     {
//         ret += 5;
//     }
//     trd->result = ret;
//     trd->stat = NORMAL;
//     //delete str;
//     //exit(1); //exit终止一个进程 所有线程都会终止
//     //pthread_exit((void*)-1); //终止一个进程 返回void*
//     //return ((void*)1);
//     return args;
// }

// int main()
// {
//     pthread_t tarr[10] = {0};
//     for(int i = 0;i<10;++i)
//     {
//         //char buf[64] = {0};
//         char* buf = new char[64];
//         snprintf(buf,64,"thread-%d",i+1);
//         ThreadData* t = new ThreadData(buf,i,time(nullptr),i+1);
//         int n = pthread_create(tarr+i,nullptr,fun,(void*)t);
//         if(n != 0) return -1;
//         cout<<t->tname<<"线程创建成功！"<<"创建时间:"<<t->time<<endl;
//         sleep(1);
//     }

//     //pthread_exit(0); //终止主线程，主线程进入僵尸状态，整个进程体现僵尸状态等待从线程，当所有从线程退出后，随着退出

//     // while(true)
//     // {
//     //     cout<<"主线程运行中..."<<endl;
//     //     sleep(1);
//     // }

//     for(int i = 0;i<10;++i)
//     {
//         void* ret = nullptr;
//         int n = pthread_join(tarr[i],&ret); //主线程等待从线程退出
//         ThreadData* trd = static_cast<ThreadData*>(ret);
//         if(n != 0) return -1;
//         if(trd->stat == NORMAL) cout<<trd->tname<<"线程被回收,处理结果:"<<trd->result<<endl; //64位机器下指针是8字节 使用int强转会损失精度
//         else cout<<"线程异常！"<<endl;
//         delete trd;
//     }

//     return 0;
// }

void* fun(void* args)
{
    cout<<"从线程ID:"<<pthread_self()<<endl;
    return nullptr;
}

int main()
{
    pthread_t t;
    int n = pthread_create(&t,nullptr,fun,nullptr);
    if(n != 0) cerr<<"ERROR" <<endl;
    sleep(1);
    cout<<"t="<<t<<endl;
    cout<<"主线程ID:"<<pthread_self()<<endl;

    return 0;
}